package com.edu.leetcode.dataStruct;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @作者 five-five
 * @创建时间 2021/1/6
 */
public class Demo07 {
    public static void main(String[] args) {
        Demo07 demo07 = new Demo07();
        List<List<String>> strs = new ArrayList<>();
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        List<String> list2 = new ArrayList<>();
        list2.add("b");
        list2.add("c");
        strs.add(list);
        strs.add(list2);
        demo07.calcEquation(strs, new double[]{2.0d, 3.0d}, strs);
    }

    /**
     * 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件，其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。
     * 另有一些以数组 queries 表示的问题，其中 queries[j] = [Cj, Dj] 表示第 j 个问题，请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。
     * 返回 所有问题的答案 。如果存在某个无法确定的答案，则用 -1.0 替代这个答案
     *
     * @param equations
     * @param values
     * @param queries
     * @return
     */
    public double[] calcEquation(List<List<String>> equations, double[] values, List<List<String>> queries) {
        String key = getMaxOutKey(equations);

        return null;
    }

    /**
     * 拿出集合中出现次数最多的key
     * @param equations
     * @return
     */
    private String getMaxOutKey(List<List<String>> equations) {
        //拿一个集合把所有集合的元素转起来
        HashMap<String, Integer> map = new HashMap<>();
        for (List<String> equation : equations) {
            for (String s : equation) {
                if (map.containsKey(s)) {
                    Integer integer = map.get(s);
                    map.put(s, ++integer);
                } else {
                    map.put(s, 1);
                }
            }
        }
        //取出map中value最大的
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        String key = entries.stream().sorted((a, b) -> {
            return -a.getValue() + b.getValue();
        }).findFirst().get().getKey();//自然排序接口默认是升序

        return key;
    }
}
